/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.talentos.facade;

import br.uniceub.fsw.arquitetura.persistencia.transacao.Transacao;
import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.talentos.dao.DesligamentoDAO;
import br.uniceub.fsw.talentos.vo.DesligamentoVO;
import br.uniceub.fsw.talentos.bo.DesligamentoBO;
import br.uniceub.fsw.util.TabelaHtml;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Facade da entidade Desligamento.
 * 
 * @author Bruno Schifer Bernardi
 */
public class DesligamentoFacade {
    /**
     * Mensagem de retorno do sistema.
     */
    private String message;

    /**
     * Value object do desligamento.
     */
    private DesligamentoVO desligamento;
    
    /**
     * Objeto de acesso aos dados de desligamento.
     */
    private DesligamentoDAO desligamentoDao;
    
    /**
     * Objeto da camada de negócio de desligamento.
     */
    private DesligamentoBO desligamentoBo;
    
    /**
     * Construtor da classe.
     */
    public DesligamentoFacade() {
        this.desligamentoDao = new DesligamentoDAO();
        this.desligamentoBo = new DesligamentoBO();
    }
    
    /**
     * Getter da mensagem de retorno.
     * 
     * @return Mensagem de retorno.
     */
    public String getMessage() {
        String retorno = null;
        if(this.message == null || this.message.equals("")) {
            retorno = "&nbsp";
        } else {
            retorno = this.message;
        }
        return retorno;
    }

    /**
     * Setter da mensagem de retorno.
     * 
     * @param message Mensagem de retorno.
     */
    public void setMessage(String message) {
        this.message = message;
    }
    
    /**
     * Responsável por executar a operação selecionada pelo usuário.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void operacao(HttpServletRequest req, HttpServletResponse resp) {
        String oper = req.getParameter("operacao");

        if(oper != null)
        {
            if (oper.equals("consultar")) {
                this.consultar(req, resp);
            }
            if (oper.equals("incluir")) {
                this.incluir(req, resp);
            }
        }
    }

    /**
     * Retorna o desligamento.
     * 
     * @return Objeto desligamento.
     */
    public DesligamentoVO getDesligamento() {
        return this.desligamento;
    }
    
    /**
     * Seta o desligamento.
     * 
     * @param desligamento Objeto desligamento.
     */
    public void setDesligamento(DesligamentoVO desligamento) {
        this.desligamento = desligamento;
    }
    
    /**
     * Consultar um desligamento.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void consultar(HttpServletRequest req, HttpServletResponse resp) {
        String idDesligamentoTmp = req.getParameter("idDesligamento");
        
        Integer idDesligamento = null;
        
        if(idDesligamentoTmp == null || idDesligamentoTmp.equals("")) {
            return;
        } else {
            idDesligamento = Integer.parseInt(idDesligamentoTmp);
        }
        
        this.desligamento = desligamentoDao.consultarPorId(idDesligamento);
    }

    /**
     * Incluir um desligamento.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void incluir(HttpServletRequest req, HttpServletResponse resp) {
        String idTalento = req.getParameter("idTalento");
        String obDesligamento = req.getParameter("obDesligamento");

        desligamento = new DesligamentoVO();
        desligamento.setCodigoTalento(Integer.parseInt(idTalento));
        desligamento.setDataDesligamento(new Date());
        desligamento.setObservacaoDesligamento(obDesligamento);
        
        String mensagem = null;
        
        // Validações da BO
        try {
            desligamentoBo.validarVOUnico(desligamento);
        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        }
        
        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                desligamentoDao.inserir(desligamento);

                Transacao.efetivar();

                mensagem = "Tipo de Desligamento incluído com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na inclusão do tipo de ocorrencia: " + ex.getMessage();
                
                desligamento = null;
            }
        } else {
            desligamento = null;
        }
        
        this.message = mensagem;
    }

   
    /**
     * Confirmar a exclusão de desligamento.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */

    
    /**
     * Transforma os campos de um VO em uma lista de Strings
     * 
     * @return lista de strings com os valores em ordem
     */
    public List<String> converterVoParaString(DesligamentoVO desligamento) {
        List<String> valores = new ArrayList<String>();
        
        valores.add(desligamento.getIdentificadorDesligamento().toString());
        valores.add(desligamento.getCodigoTalento().toString());
        valores.add(desligamento.getObservacaoDesligamento());
        valores.add(desligamento.getDataDesligamento().toString());
        
        return valores;
    }
}
